package kotlinquanweizhinan.chapt07.split

/*
* Trvern 英['tævən]美['tævərn] n.酒馆;客栈
* */
class Trvern {
}

const val TRVERN_NAME ="Taernyl's Folly"

fun main() {
    placeOrder("shandy,Ddragon's Breath,5.91")

}

/**
 * 洒水单数据使用字符串表示，用逗号分隔的饮料类型、饮料名和价格(金币)以这样的格式存储
 * shandy,Ddragon's Breath,5.91
 * 香迪,
 */
private fun placeOrder(menuData:String){
    val indexOfApostrophe = TRVERN_NAME.indexOf('\'')
    val tavernMaster = TRVERN_NAME.substring(0 until indexOfApostrophe)
    println("Madrigal speaks with $tavernMaster about their order.") //adrigal 与 Taernyl 谈论他们的订单。

    val data = menuData.split(',')
//    val type = data[0]
//    val name = data[1]
//    val price = data[2]

    /**
     * split函数返回的是一个List集合数据，而List集合又支持一种叫解构(destructuring)的语法特性
     * (这个Kotlin特性允许你在一个表达式里给多个变量赋值)
     * 解构常用来简化变量的赋值。只要是集合结果，就可以使用解构赋值。除了List集合，其
     * 他支持解构语法的数据类型有Maps、Pairs以及数据类_
     */
    val (type,name,price) = menuData.split(',')
    val message = "Madrigal buys a $name ($type) for $price."
    println(message)

    val phrase = "Ah,deliciouse $name!".toUpperCase()
    println("Madrigal exclaims:".toUpperCase()+"${toDragSpeak(phrase)}")


}

private fun toDragSpeak(phrase:String)=
    phrase.replace(Regex("[aeiouAEIOU]")){
        when(it.value){
            "a" -> "4"
            "e" -> "3"
            "i" -> "1"
            "o" -> "0"
            "u" -> "|_|"
            "A" -> "4"
            "E" -> "3"
            "I" -> "1"
            "O" -> "0"
            "U" -> "|_|"
            else -> it.value
        }
    }